proc txCfg::delitem { w parent id } {upvar \#0 $w data
$data(w:hlist) delete entry $parent.$id}
proc txCfg::hideitems { w parent } {upvar \#0 $w data
set children [$data(w:hlist) info children $parent]
foreach i $children {$data(w:hlist) hide entry $i}
$data(w:tree) setmode $parent open}
proc txCfg::blink { w } {upvar \#0 $w data
set e [$data(w:current) subwidget entry]
$e selection clear
$e selection range 0 end
after 200 $e selection clear
after 400 $e selection range 0 end
after 600 $e selection clear}
proc txCfg::ShowCmd { w path } {set item {}
lset [split $path "."] group item
if { $item=={} } {return}
upvar \#0 $w data
set data(group) $group
set data(item) $item
if { $data(-showcmd)!="" } {set cmd [Replace $data(-showcmd) [list %w=$w %p=$path %g=$group %i=$item %h=$data(w:hlist) %t=$data(w:tree) %G=[$data(w:hlist) info data $group] %I=[$data(w:hlist) item cget $path 0 -text] ]]
eval $cmd}
return}
proc txCfg::Validate { w new format} {switch [lindex $format 0] {"s" {set ret 1}
"i" -
"int" {set ret 1
if { [regexp {^[+-]?[0-9]+$} $new] } {lset -create $format dummy lo hi
if { ($lo!="") && ($lo>$new) } {set ret 0}
if { ($hi!="") && ($hi<$new) } {set ret 0}} else {set ret 0}
set err [Msg def txCfg IntFormatErr "Integer format '%f'" "%f=$format"]}
"r" -
"real" {set ret [regexp -nocase {^[-+]?([0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+)(e[-+]?[0-9]+)?$} $new]
if $ret {lset -create $format dummy lo hi
if { ($lo!="") && ($lo>$new) } {set ret 0}
if { ($hi!="") && ($hi<$new) } {set ret 0}} else {set ret 0}
set err [Msg def txCfg RealFormatErr "Real format '%f'" "%f=$format"]}
"o" -
"option" {set ret 1
if { [lsearch -exact [lrange $format 1 end] $new]<0 } {set ret 0
set err [Msg def txCfg OptionFormatErr "Option format '%f'" "%f=$format"]}}
"color" {set ret [regexp -nocase {(^#[0-9a-fA-F]+$)|(^[A-Za-z]+$)} $new]
set err [Msg def txCfg ColorFormatErr "Color format '%f'" "%f=$format"]}
"font" {set ret [regexp -nocase {^-[^-]+-[^-]+-[^-]+-.*$} $new]
set err [Msg def txCfg FontFormatErr "Font format '%f'" "%f=$format"]}
"dir" {if { ![file isdirectory $new] } {set err [Msg def txCfg DirFormatErr "This is not a valid directory name or the directory does not exist."]
set ret 0} else {set ret 1}}
default {set ret 0
set err [Msg def txCfg NoFormatErr "The format '%f' is new to me, add it in widget.tcl" "%f=$format"]}}
if { $ret!=1 } {Require txError 1
upvar \#0 $w data
ErrorReport $data(w:current) [Msg def txCfg InputErrorHdr "Invalid Input"] [Msg def txCfg InputError "The value entered (%v) is not allowed for '%n'. Please read the documentation for more information about legal values.\n%e" %v=$new %n=[$data(w:name) get] %e=$err ]
return 0}
return 1}
proc txCfg::Edit { w what } {upvar \#0 $w data
if { $data(group)=="" } {bell
return 0}
if { $what=="default" } {$data(w:current) set [$data(w:default) get]}
if { ![$data(w:current) validate] } {return 0}
if { $data(-editcmd)!="" } {$data(w:current) config -modified 0
set cmd [Replace $data(-editcmd) [list %w=$w %e=$data(w:current) %g=$data(group) %i=$data(item) %G=[$data(w:hlist) info data $data(group)] %I=[$data(w:hlist) item cget $data(group).$data(item) 0 -text] %d=[$data(w:default) get] %t=[$data(w:current) get] %n=[$data(w:name) get] %m=$what %f=$data(format) %o=[$data(w:doc) get 1.0 end] ]]
ErrorReport $CFG(top) [Msg def CfgEdit PkgErrHdr "File not found"] [Msg def CfgEdit PkgErrMsg "the package file for '%a' could not be located" "%a=$AppName" ]
return}
set CFG(LibList) {}
ConfigRead $fname "ConfigDef"
set req [join {Req uire} ""]
foreach i $CFG(LibList) {catch {eval $req $i}}
catch {set ud [Cfg get CfgEdit UserDir]
ConfigRead $ud/$AppName.cfg "Cfg set"}}
proc ConfigFillIn { w } {ConfigStart
set cvars [Cfg groups * *]
set c1 0
foreach i [lsort $cvars] {$w addgroup $c1 "$i"
set cc [Cfg info $i *]
set c2 0
foreach j [lsort $cc] {$w additem $c1 $c2 "$j"
incr c2}
$w hideitems $c1
incr c1}}
proc ConfigShowOne { w group item } {set orig {}
set now {}
set doc {}
catch {set orig [Cfg getdef $group $item]}
try {set now [Cfg getset $group $item]} {set now $orig}
set doc [Cfg cget $group $item -doc]
set format [Cfg cget $group $item -format]
if { $format=="" } {set format "s"}
$w showitem $group $item $orig $now $doc $format}
proc ConfigEditAction { w what group item orig new doc format} {global CFG
switch $what {change {Cfg set $group $item $new
$w showitem $group $item $orig $new $doc $format}
revert {set new [Cfg get $group $item]
$w showitem $group $item $orig $new $doc $format}
default {Cfg set $group $item [Cfg getdef $group $item]
if { $CFG(modified) } {set ret [AskReport $CFG(top) [Msg def CfgEdit AskSaveHdr "Save Settings"] [Msg def CfgEdit AskSaveMsg "You have made changes to the configuration settings. Click on 'Yes' to save them, 'No' will not save them but will keep the changes for the current session."] ]
if { $ret==-1 } {return}
if { $ret==1 } {ConfigSaveAction}}
destroy $w
unset CFG}
proc ConfigDef { group args } {global CFG
if { [regexp {^tlib-([^0-9]+)([0-9\.]+)} $group dummy name version]} {lappend CFG(LibList) [list $name $version]}}